const fp = require('lodash/fp');
const { Maybe, Container } = require('./support');

/**
 * 练习1:使用 fp.add(x, y) 和 fp.map(f, x) 创建一个能让 functor 里值增加的函数 ex1
 */
let maybe = Maybe.of([5, 6, 1]);
let ex1 = (num) => {
  // 你需要实现的函数...
  let fn = fp.flowRight(fp.map(fp.add(num)))
  return maybe.map(fn)
}

/**
 * 练习2: 实现一个函数 ex2，能够使用 fp.first 获取列表的第一个元素
 */
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do']);
let ex2 = () => {
  // 你需要实现的函数...
  return xs.map(fp.first)._value;
}

/**
 * 练习3: 实现一个函数 ex3，使用 safeProp 和 fp.first 找到 user 的名字的首字母
 */
let safeProp = fp.curry(function(x, o) {
  return Maybe.of(o[x]);
});
let user = { id: 2, name: 'Albert' };
let ex3 = () => {
  // 你需要实现的代码...
  return safeProp('name', user).map(fp.first)._value;
}

/**
 * 使用 Maybe 重写 ex4，不要有 if 语句
 * @param {*} n 
 */
let ex4 = (n) => {
  return Maybe.of(n).map(parseInt)._value;
}

